package ar.com.larreta.grilla.client.ventanas;

import java.util.ArrayList;

import ar.com.larreta.controlador.client.Invocador;
import ar.com.larreta.grilla.client.Grilla;
import ar.com.larreta.intercambio.client.comunes.ListaDeMensajes;
import ar.com.larreta.intercambio.client.comunes.Mensaje;
import ar.com.larreta.intercambio.client.comunes.MensajeActualizado;
import ar.com.larreta.vista.client.BarraHerramientas;
import ar.com.larreta.vista.client.CajaDeTexto;
import ar.com.larreta.vista.client.CamposConst;
import ar.com.larreta.vista.client.Constantes;
import ar.com.larreta.vista.client.Estado;
import ar.com.larreta.vista.client.Mensajes;

import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter;

public class VentanaMensajes extends VentanaConGrilla {
	
	private static final Integer LARGO_GRILLA = 240; 
	private static final Integer TAMANIO_TEXTO_MENSAJE = 350;
	
	private static final String LISTA = "listaMensajes";

	private CajaDeTexto idMensaje;
	private CajaDeTexto textoMensaje;
	
	public VentanaMensajes() {
		
		super(Mensajes.getInstancia().get("msg.mensajes"), null);
		
		VerticalPanel panel = new VerticalPanel();
		panel.setSize(Constantes.ANCHO_VENTANA_POR_DEFECTO, Constantes.LARGO_VENTANA_POR_DEFECTO);
		add(panel);
		
		FieldSet fieldSet = new FieldSet();
		fieldSet.setHeading(Mensajes.getInstancia().get("msg.detalle"));
		fieldSet.setSize(getAnchoVentana() - 15, 80);
		
		idMensaje = new CajaDeTexto(Mensajes.getInstancia().get("msg.id"), null);
		idMensaje.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(idMensaje.getCampoTexto());
		registrarComoNoModificable(idMensaje.getCampoTexto());
		fieldSet.add(idMensaje.getHorizontal());

		textoMensaje = new CajaDeTexto(Mensajes.getInstancia().get("msg.texto"), null);
		textoMensaje.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		textoMensaje.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(textoMensaje.getCampoTexto());
		fieldSet.add(textoMensaje.getHorizontal());

		barraHerramientas = new BarraHerramientas(this, getAnchoVentana(), 25);
		panel.add(barraHerramientas);
		panel.add(fieldSet);

		grilla = new Grilla(new ListaDeMensajes(), getConfiguracionColumnas(), LISTA);
		grilla.setSize(getAnchoVentana() - 15, LARGO_GRILLA);
		
		grilla.addSelectionChangeListener(new CambioEnLaSeleccionGrillaMensajes(this));
		grilla.habilitarMenuContextual(new BotonBorrarMensajesPresionado(this));
		
		grilla.agregarFiltro(new StringFilter(CamposConst.ID));
		grilla.agregarFiltro(new StringFilter(CamposConst.MENSAJE));
		
		panel.add(grilla);
		panel.add(grilla.getToolBar());
		
		show();
	}
	
	
	public void confirmando(){
		if (esValido()) {
			Mensaje mensaje = null;
			if (estado.equals(Estado.CREACION)){
				mensaje = new Mensaje();
			} else {
				mensaje = new MensajeActualizado();
			}
			mensaje.setId((String)idMensaje.getCampoTexto().getValue());
			mensaje.setMensaje((String)textoMensaje.getCampoTexto().getValue());
			Invocador.invocar(mensaje, new RetornoVentanaMensajes(this));
		}
	}
	
	private ColumnModel getConfiguracionColumnas() {
		ColumnConfig columnID = new ColumnConfig(CamposConst.ID, Mensajes.getInstancia().get("msg.id"), 125);
		ColumnConfig columnMensaje = new ColumnConfig(CamposConst.MENSAJE, Mensajes.getInstancia().get("msg.mensaje"), 357);
		ArrayList<ColumnConfig> columnConfigs = new ArrayList<ColumnConfig>();
		columnConfigs.add(columnID);
		columnConfigs.add(columnMensaje);
		return new ColumnModel(columnConfigs);
	}
	
	public Grilla getGrilla() {
		return grilla;
	}

	public CajaDeTexto getIdMensaje() {
		return idMensaje;
	}

	public CajaDeTexto getTextoMensaje() {
		return textoMensaje;
	}
}